package com.itheima;

/**
 * 构造器的特点：
 * 1. 默认编译器会自动为类创建一个无参的构造器
 * 2. 如果手动添加构造器，那么编译器就不会再为类创建一个默认的无参的构造器
 */
public class Student {

    //Field--》属性，字段，成员变量（变量）
    //使用private关键字把属性给私有
    private String name;
    private double math;
    private double chinese;

    public void setChinese(double chinese) {
        //考虑属性值的安全性
        if (chinese > 100 || chinese < 0) {
            System.out.println("chinese的值不合法:" + chinese);
            return;
        }
        this.chinese = chinese;
    }

    public double getChinese() {

        return chinese;
    }


    public void setMath(double math) {
        if (math > 100 || math < 0){
            System.out.println("math的值不合法:" + math);
            return;
        }
        this.math = math;
    }

    public double getMath() {
        return math;
    }

    //提供一个公共的方法，方便外部使用，目的是为了给属性赋值
    public void setName(String name) {
        this.name = name;
    }

    //提供一个公共的方法，方便外部使用，目的是为了获取属性的值
    public String getName() {
        return name;
    }


    //构造方法
    //构造器的名字必须和类名保持一致，并且不能有返回值类型（不属于方法）
    public Student() {
        System.out.println("无参构造器");
    }

    //带参构造器
    //局部变量---》构造器中、方法中声明的这些形参
    //成员变量---》类中直接声明的变量
    //如果局部变量和成员变量名字相同了，可以用this关键字去区分，在成员变量的前面加上this.
    public Student(String name, double math, double chinese) {
        System.out.println("带参构造器");
        //就近原则
        //this关键字，代表当前的对象，用于获取成员变量
        this.name = name;
        this.math = math;
        this.chinese = chinese;
    }

    public void printThis() {
        //this代表未来的对象，谁调用当前的方法，就是哪个对象
        System.out.println(this);
    }


}
